/*
 * @Description: In User Settings Edit
 * @Author: your name
 * @Date: 2019-08-26 08:48:02
 * @LastEditTime: 2019-08-27 08:41:10
 * @LastEditors: Please set LastEditors
 */
/*
 * @lc app=leetcode.cn id=18 lang=javascript
 *
 * [18] 四数之和
 *
 * https://leetcode-cn.com/problems/4sum/description/
 *
 * algorithms
 * Medium (36.00%)
 * Likes:    268
 * Dislikes: 0
 * Total Accepted:    27.9K
 * Total Submissions: 77.6K
 * Testcase Example:  '[1,0,-1,0,-2,2]\n0'
 *
 * 给定一个包含 n 个整数的数组 nums 和一个目标值 target，判断 nums 中是否存在四个元素 a，b，c 和 d ，使得 a + b + c
 * + d 的值与 target 相等？找出所有满足条件且不重复的四元组。
 * 
 * 注意：
 * 
 * 答案中不可以包含重复的四元组。
 * 
 * 示例：
 * 
 * 给定数组 nums = [1, 0, -1, 0, -2, 2]，和 target = 0。
 * 
 * 满足要求的四元组集合为：
 * [
 * ⁠ [-1,  0, 0, 1],
 * ⁠ [-2, -1, 1, 2],
 * ⁠ [-2,  0, 0, 2]
 * ]
 * 
 * 
 */
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[][]}
 */
var fourSum = function(nums, target) {
    var result = {}
    let len = nums.length
    if(len<4) return []    
    nums = nums.sort((a,b)=>a-b)
    for(let i=0;i<len-3;i++){
        for(let j=i+1;j<len-2;j++){
            let l = j+1
            let r = len-1
            while(l < r){
                const a = nums[i]+nums[j]+nums[l]+nums[r]
                if( a == target){
                    result[[nums[i],nums[j],nums[l],nums[r]]] = [nums[i],nums[j],nums[l],nums[r]]
                    l++,r--
                    continue
                }
                if(a < target){
                    l++
                    continue
                }else{
                    r--
                    continue
                }
            }
        }
    }
    return Object.values(result)
};

